<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html lang="en" dir="ltr" class="client-nojs">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Struct declaration - cppreference.com</title>
<meta charset="UTF-8">
<meta name="generator" content="MediaWiki 1.21.2">


<link rel="shortcut icon" href="../../../favicon.ico">



<link rel="stylesheet" href="../../../common/ext.css">
<meta name="ResourceLoaderDynamicStyles" content="">
<link rel="stylesheet" href="../../../common/site_modules.css">
<style>a:lang(ar),a:lang(ckb),a:lang(fa),a:lang(kk-arab),a:lang(mzn),a:lang(ps),a:lang(ur){text-decoration:none}#toc{display:none}.editsection{display:none}
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-css:7:472787eddcf4605d11de8c7ef047234f */</style>

<script src="../../../common/startup_scripts.js"></script>
<script>if(window.mw){
mw.config.set({"wgCanonicalNamespace":"","wgCanonicalSpecialPageName":false,"wgNamespaceNumber":0,"wgPageName":"c/language/struct","wgTitle":"c/language/struct","wgCurRevisionId":70243,"wgArticleId":9822,"wgIsArticle":true,"wgAction":"view","wgUserName":null,"wgUserGroups":["*"],"wgCategories":["Todo with reason"],"wgBreakFrames":false,"wgPageContentLanguage":"en","wgSeparatorTransformTable":["",""],"wgDigitTransformTable":["",""],"wgDefaultDateFormat":"dmy","wgMonthNames":["","January","February","March","April","May","June","July","August","September","October","November","December"],"wgMonthNamesShort":["","Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"],"wgRelevantPageName":"c/language/struct","wgRestrictionEdit":[],"wgRestrictionMove":[]});
}</script><script>if(window.mw){
mw.loader.implement("user.options",function(){mw.user.options.set({"ccmeonemails":0,"cols":80,"date":"default","diffonly":0,"disablemail":0,"disablesuggest":0,"editfont":"default","editondblclick":0,"editsection":0,"editsectiononrightclick":0,"enotifminoredits":0,"enotifrevealaddr":0,"enotifusertalkpages":1,"enotifwatchlistpages":0,"extendwatchlist":0,"externaldiff":0,"externaleditor":0,"fancysig":0,"forceeditsummary":0,"gender":"unknown","hideminor":0,"hidepatrolled":0,"imagesize":2,"justify":0,"math":1,"minordefault":0,"newpageshidepatrolled":0,"nocache":0,"noconvertlink":0,"norollbackdiff":0,"numberheadings":0,"previewonfirst":0,"previewontop":1,"quickbar":5,"rcdays":7,"rclimit":50,"rememberpassword":0,"rows":25,"searchlimit":20,"showhiddencats":0,"showjumplinks":1,"shownumberswatching":1,"showtoc":0,"showtoolbar":1,"skin":"cppreference2","stubthreshold":0,"thumbsize":2,"underline":2,"uselivepreview":0,"usenewrc":0,"watchcreations":0,"watchdefault":0,"watchdeletion":0,
"watchlistdays":3,"watchlisthideanons":0,"watchlisthidebots":0,"watchlisthideliu":0,"watchlisthideminor":0,"watchlisthideown":0,"watchlisthidepatrolled":0,"watchmoves":0,"wllimit":250,"variant":"en","language":"en","searchNs0":true,"searchNs1":false,"searchNs2":false,"searchNs3":false,"searchNs4":false,"searchNs5":false,"searchNs6":false,"searchNs7":false,"searchNs8":false,"searchNs9":false,"searchNs10":false,"searchNs11":false,"searchNs12":false,"searchNs13":false,"searchNs14":false,"searchNs15":false,"gadget-ColiruCompiler":1});;},{},{});mw.loader.implement("user.tokens",function(){mw.user.tokens.set({"editToken":"+\\","patrolToken":false,"watchToken":false});;},{},{});
/* cache key: mwiki1-mwiki_en_:resourceloader:filter:minify-js:7:ca03345b1e2c4d90a25d968753a73b92 */
}</script>
<script>if(window.mw){
mw.loader.load(["mediawiki.page.startup","mediawiki.legacy.wikibits","mediawiki.legacy.ajax"]);
}</script>
<style type="text/css">/*<![CDATA[*/
.source-c {line-height: normal;}
.source-c li, .source-c pre {
	line-height: normal; border: 0px none white;
}
/**
 * GeSHi Dynamically Generated Stylesheet
 * --------------------------------------
 * Dynamically generated stylesheet for c
 * CSS class: source-c, CSS id: 
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 * --------------------------------------
 */
.c.source-c .de1, .c.source-c .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.c.source-c  {font-family:monospace;}
.c.source-c .imp {font-weight: bold; color: red;}
.c.source-c li, .c.source-c .li1 {font-weight: normal; vertical-align:top;}
.c.source-c .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.c.source-c .li2 {font-weight: bold; vertical-align:top;}
.c.source-c .kw1 {color: #0000dd;}
.c.source-c .kw2 {color: #0000ff;}
.c.source-c .kw3 {color: #0000dd;}
.c.source-c .kw4 {color: #0000ff;}
.c.source-c .co1 {color: #909090;}
.c.source-c .co2 {color: #339900;}
.c.source-c .coMULTI {color: #ff0000; font-style: italic;}
.c.source-c .es0 {color: #008000; font-weight: bold;}
.c.source-c .es1 {color: #008000; font-weight: bold;}
.c.source-c .es2 {color: #008000; font-weight: bold;}
.c.source-c .es3 {color: #008000; font-weight: bold;}
.c.source-c .es4 {color: #008000; font-weight: bold;}
.c.source-c .es5 {color: #008000; font-weight: bold;}
.c.source-c .br0 {color: #008000;}
.c.source-c .sy0 {color: #008000;}
.c.source-c .sy1 {color: #000080;}
.c.source-c .sy2 {color: #000040;}
.c.source-c .sy3 {color: #000040;}
.c.source-c .sy4 {color: #008080;}
.c.source-c .st0 {color: #008000;}
.c.source-c .nu0 {color: #000080;}
.c.source-c .nu6 {color:#000080;}
.c.source-c .nu8 {color:#000080;}
.c.source-c .nu12 {color:#000080;}
.c.source-c .nu16 {color:#000080;}
.c.source-c .nu17 {color:#000080;}
.c.source-c .nu18 {color:#000080;}
.c.source-c .nu19 {color:#000080;}
.c.source-c .ln-xtra, .c.source-c li.ln-xtra, .c.source-c div.ln-xtra {background-color: #ffc;}
.c.source-c span.xtra { display:block; }

/*]]>*/
</style>
<style type="text/css">/*<![CDATA[*/
.source-text {line-height: normal;}
.source-text li, .source-text pre {
	line-height: normal; border: 0px none white;
}
/**
 * GeSHi Dynamically Generated Stylesheet
 * --------------------------------------
 * Dynamically generated stylesheet for text
 * CSS class: source-text, CSS id: 
 * GeSHi (C) 2004 - 2007 Nigel McNie, 2007 - 2008 Benny Baumann
 * (http://qbnz.com/highlighter/ and http://geshi.org/)
 * --------------------------------------
 */
.text.source-text .de1, .text.source-text .de2 {font: normal normal 1em/1.2em monospace; margin:0; padding:0; background:none; vertical-align:top;}
.text.source-text  {font-family:monospace;}
.text.source-text .imp {font-weight: bold; color: red;}
.text.source-text li, .text.source-text .li1 {font-weight: normal; vertical-align:top;}
.text.source-text .ln {width:1px;text-align:right;margin:0;padding:0 2px;vertical-align:top;}
.text.source-text .li2 {font-weight: bold; vertical-align:top;}
.text.source-text .ln-xtra, .text.source-text li.ln-xtra, .text.source-text div.ln-xtra {background-color: #ffc;}
.text.source-text span.xtra { display:block; }

/*]]>*/
</style>
<!--[if lt IE 7]><style type="text/css">body{behavior:url("/mwiki/skins/cppreference2/csshover.min.htc")}</style><![endif]-->
</head>
<body class="mediawiki ltr sitedir-ltr ns-0 ns-subject page-c_language_struct skin-cppreference2 action-view cpp-navbar">
        <!-- header -->
        
        <!-- /header -->
        <!-- content -->
        <div id="cpp-content-base">
            <div id="content">
                <a id="top"></a>
                <div id="mw-js-message" style="display:none;"></div>
                                <!-- firstHeading -->
                <h1 id="firstHeading" class="firstHeading">Struct declaration</h1>
                <!-- /firstHeading -->
                <!-- bodyContent -->
                <div id="bodyContent">
                                        <!-- tagline -->
                    <div id="siteSub">From cppreference.com</div>
                    <!-- /tagline -->
                                        <!-- subtitle -->
                    <div id="contentSub"><span class="subpages">&lt; <a href="../../c.html" title="c">c</a>‎ | <a href="../language.1.html" title="c/language">language</a></span></div>
                    <!-- /subtitle -->
                                                            <!-- bodycontent -->
                    <div id="mw-content-text" lang="en" dir="ltr" class="mw-content-ltr">
<div class="t-navbar" style="">
<div class="t-navbar-sep"> </div>
<div class="t-navbar-head">
<a href="../../c.html" title="c"> C</a><div class="t-navbar-menu"><div>
<div><table class="t-nv-begin" cellpadding="0" style="line-height:1.1em;">
<tr class="t-nv"><td colspan="5"> <a href="../language.1.html" title="c/language"> Language</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../header.html" title="c/header"> Standard Library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../types.html" title="c/types"> Type support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../memory.html" title="c/memory"> Dynamic memory management</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../error.html" title="c/error"> Error handling</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../program.html" title="c/program"> Program utilities</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../chrono.html" title="c/chrono"> Date and time utilities</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../string.html" title="c/string"> Strings library</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../algorithm.html" title="c/algorithm"> Algorithms</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../numeric.html" title="c/numeric"> Numerics</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../io.html" title="c/io"> Input/output support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../locale.html" title="c/locale"> Localization support</a> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../thread.html" title="c/thread"> Thread support</a> <span class="t-mark-rev t-since-c11">(C11)</span> </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../atomic.html" title="c/atomic"> Atomic operations</a> <span class="t-mark-rev t-since-c11">(C11)</span> </td></tr>
</table></div>
<div></div>
</div></div>
</div>
<div class="t-navbar-sep"> </div>
<div class="t-navbar-head">
<a href="../language.1.html" title="c/language"> C language</a><div class="t-navbar-menu"><div>
<div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv-h1"><td colspan="5"> General topics</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../preprocessor.html" title="c/preprocessor"> Preprocessor</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/comments (page does not exist)"> Comments</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="../keyword.html" title="c/keyword"> Keywords</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/escape (page does not exist)"> Escape sequences</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="history.html" title="c/language/history"> History of C</a>
</td></tr>
<tr class="t-nv-h1"><td colspan="5"> Flow control</td></tr>
<tr class="t-nv-h2"><td colspan="5"> Conditional execution statements</td></tr>
<tr class="t-nv-col-table">
<td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="if.html" title="c/language/if"> <code>if</code> statement</a>
</td></tr>
</table></div></td>
<td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="switch.html" title="c/language/switch"> <code>switch</code> statement</a>
</td></tr>
</table></div></td>
</tr>
<tr class="t-nv-h2"><td colspan="5"> Iteration statements</td></tr>
<tr class="t-nv-col-table">
<td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="for.html" title="c/language/for"> <code>for</code> loop</a>
</td></tr>
</table></div></td>
<td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="while.html" title="c/language/while"> <code>while</code> loop</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="do.html" title="c/language/do"> <code>do-while</code> loop</a>
</td></tr>
</table></div></td>
</tr>
<tr class="t-nv-h2"><td colspan="5"> Jump statements </td></tr>
<tr class="t-nv-col-table">
<td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="continue.html" title="c/language/continue"> <code>continue</code> statement</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="break.html" title="c/language/break"> <code>break</code> statement</a>
</td></tr>
</table></div></td>
<td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="goto.html" title="c/language/goto"> <code>goto</code> statement</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="return.html" title="c/language/return"> <code>return</code> statement</a>
</td></tr>
</table></div></td>
</tr>
<tr class="t-nv-h1"><td colspan="5"> Functions</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/function (page does not exist)"> function declaration</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/inline (page does not exist)"> inline specifier</a>
</td></tr>
<tr class="t-nv-h1"><td colspan="5"> Types</td></tr>
<tr class="t-nv-col-table">
<td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="types.html" title="c/language/types"> fundamental types</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/pointer (page does not exist)"> pointer types</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <strong class="selflink"> compound types</strong>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/enum (page does not exist)"> enumeration types</a>
</td></tr>
</table></div></td>
<td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="union.html" title="c/language/union"> union types</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/function (page does not exist)"> function types</a>
</td></tr>
</table></div></td>
</tr>
<tr class="t-nv-h2"><td colspan="5"> Specifiers</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="cv.html" title="c/language/cv"> cv specifiers</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="storage_class_specifiers.html" title="c/language/storage class specifiers"> storage-class specifiers</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/alignas (page does not exist)"> alignas specifier</a> <span class="t-mark-rev t-since-c99">(C99)</span>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="function_specifiers.html" title="c/language/function specifiers"> function specifiers</a> <span class="t-mark-rev t-since-c99">(C99)</span>
</td></tr>
<tr class="t-nv-h2"><td colspan="5"> Literals</td></tr>
<tr class="t-nv-col-table">
<td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/integer literal (page does not exist)"> integer literals</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/character literal (page does not exist)"> character literals</a>
</td></tr> 
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/floating literal (page does not exist)"> floating-point literals</a>
</td></tr>  
</table></div></td>
<td><div><table class="t-nv-begin" cellpadding="0" style="">
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/string literal (page does not exist)"> string literals</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/bool literal (page does not exist)"> boolean literals</a><span class="t-mark-rev t-since-c99">(C99)</span>
</td></tr>
</table></div></td>
</tr>
<tr class="t-nv-h1"><td colspan="5"> Expressions</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="eval_order.html" title="c/language/eval order"> order of evaluation</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operators.html" title="c/language/operators"> operators</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_precedence.html" title="c/language/operator precedence"> operator precedence</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="operator_alternative.html" title="c/language/operator alternative"> alternative operators</a>
</td></tr>
<tr class="t-nv-h1"><td colspan="5"> Utilities</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="typedef.html" title="c/language/typedef"> <code>typedef</code> declaration</a>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/attributes (page does not exist)"> attributes</a> <span class="t-mark-rev t-since-c99">(C99)</span>
</td></tr>
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/implicit cast (page does not exist)"> casts</a>
</td></tr>
<tr class="t-nv-h1"><td colspan="5"> Miscellaneous </td></tr>
<tr class="t-nv"><td colspan="5"> <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/asm (page does not exist)"> Inline assembly</a>
</td></tr>
</table></div>
<div></div>
</div></div>
</div>
<div class="t-navbar-sep"> </div>
</div>
<p>A struct is a type consisting of a sequence of members whose storage is allocated in an ordered sequence (as opposed to union, which is a type consisting of a sequence of members whose storage overlaps).
</p>
<p>The type specifier for a struct is identical to the <a href="union.html" title="c/language/union"> <code>union</code></a> type specifier except for the keyword used:
</p>
<table id="toc" class="toc"><tr><td>
<div id="toctitle"><h2>Contents</h2></div>
<ul>
<li class="toclevel-1 tocsection-1"><a href="struct.html%23Syntax"><span class="tocnumber">1</span> <span class="toctext">Syntax</span></a></li>
<li class="toclevel-1 tocsection-2"><a href="struct.html%23Explanation"><span class="tocnumber">2</span> <span class="toctext">Explanation</span></a></li>
<li class="toclevel-1 tocsection-3"><a href="struct.html%23Notes"><span class="tocnumber">3</span> <span class="toctext">Notes</span></a></li>
<li class="toclevel-1 tocsection-4"><a href="struct.html%23Example"><span class="tocnumber">4</span> <span class="toctext">Example</span></a></li>
<li class="toclevel-1 tocsection-5"><a href="struct.html%23See_also"><span class="tocnumber">5</span> <span class="toctext">See also</span></a></li>
</ul>
</td></tr></table>
<h3>
<span class="editsection">[<a href="http%3A//en.cppreference.com/mwiki/index.php" title="Edit section: Syntax">edit</a>]</span> <span class="mw-headline" id="Syntax">Syntax</span>
</h3>
<table class="t-sdsc-begin">

<tr>
<td colspan="10" class="t-sdsc-sep">
</td>
</tr>
<tr class="t-sdsc">
<td> <code><b>struct</b></code> <span class="t-spar">name</span><span class="t-mark">(optional)</span> <code><b>{ </b></code> <span class="t-spar">struct-declaration-list</span> <code><b>} </b></code>
</td>
<td> (1)
</td>
<td class="t-sdsc-nopad">
</td>
</tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td>
</tr>
<tr class="t-sdsc">
<td> <code><b>struct</b></code> <span class="t-spar">name</span>
</td>
<td> (2)
</td>
<td class="t-sdsc-nopad">
</td>
</tr>



<tr>
<td colspan="10" class="t-sdsc-sep">
</td>
</tr>
</table>
<table class="t-par-begin">


<tr class="t-par">
<td>  <span class="t-spar">name</span>
</td>
<td> -
</td>
<td>  the name of the struct that's being defined
</td>
</tr>
<tr class="t-par">
<td>  <span class="t-spar">struct-declaration-list</span>
</td>
<td> -
</td>
<td>  any number of variable declarations, <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/bit field (page does not exist)">bit field</a> declarations, and <a href="http%3A//en.cppreference.com/mwiki/index.php" class="new" title="c/language/static assert (page does not exist)">static assert</a> declarations. Members of incomplete type and members of function type are not allowed (except for the flexible array member described below)
</td>
</tr>
</table>
<h3>
<span class="editsection">[<a href="http%3A//en.cppreference.com/mwiki/index.php" title="Edit section: Explanation">edit</a>]</span> <span class="mw-headline" id="Explanation">Explanation</span>
</h3>
<p>Within a struct object, addresses of its elements (and the addresses of the bit field allocation units) increase in order in which the members were defined. A pointer to a struct can be cast to a pointer to its first member (or, if the member is a bit field, to its allocation unit). Likewise, a pointer to the first member of a struct can be cast to a pointer to the enclosing struct. There may be unnamed padding between any two members of a struct or after the last member, but not before the first member. The size of a struct is at least as large as the sum of the sizes of its members.
</p>
 <table class="t-rev-begin">
<tr class="t-rev t-since-c99">
<td>
<p>If a struct defines at least one named member, it is allowed to additionally declare its last member with incomplete array type. When an element of the flexible array member is accessed (in an expression that uses operator <code><b>.</b></code> or <code><b>-&gt;</b></code> with the flexible array member's name as the right-hand-side operand), then the struct behaves as if the array member had the longest size fitting in the memory allocated for this object. If no additional storage was allocated, it behaves as if an array with 1 element, except that the behavior is undefined if that element is accessed or a pointer one past that element is produced. Initialization, <span class="t-c"><span class="mw-geshi c source-c"><span class="kw4">sizeof</span></span></span>, and the assignment operator ignore the flexible array member. Structures with flexible array members (or unions whose last member is a structure with flexible array member) cannot appear as array elements or as members of other structures.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw1">struct</span> s <span class="br0">{</span> <span class="kw4">int</span> n<span class="sy4">;</span> <span class="kw4">double</span> d<span class="br0">[</span><span class="br0">]</span><span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// s.d is a flexible array member </span>
 
    <span class="kw1">struct</span> s t1 <span class="sy1">=</span> <span class="br0">{</span> <span class="nu0">0</span> <span class="br0">}</span><span class="sy4">;</span>         <span class="co1">// OK, d is as if double d[1], but UB to access</span>
    <span class="kw1">struct</span> s t2 <span class="sy1">=</span> <span class="br0">{</span> <span class="nu0">1</span>, <span class="br0">{</span> <span class="nu16">4.2</span> <span class="br0">}</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// error: initialization ignores flexible array</span>
 
    <span class="co1">// if sizeof (double) == 8</span>
    <span class="kw1">struct</span> s <span class="sy2">*</span>s1 <span class="sy1">=</span> <a href="../memory/malloc.html"><span class="kw403">malloc</span></a><span class="br0">(</span><span class="kw4">sizeof</span> <span class="br0">(</span><span class="kw1">struct</span> s<span class="br0">)</span> <span class="sy2">+</span> <span class="nu0">64</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// as if d was double d[8]</span>
    <span class="kw1">struct</span> s <span class="sy2">*</span>s2 <span class="sy1">=</span> <a href="../memory/malloc.html"><span class="kw403">malloc</span></a><span class="br0">(</span><span class="kw4">sizeof</span> <span class="br0">(</span><span class="kw1">struct</span> s<span class="br0">)</span> <span class="sy2">+</span> <span class="nu0">46</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// as if d was double d[5]</span>
 
    s1 <span class="sy1">=</span> <a href="../memory/malloc.html"><span class="kw403">malloc</span></a><span class="br0">(</span><span class="kw4">sizeof</span> <span class="br0">(</span><span class="kw1">struct</span> s<span class="br0">)</span> <span class="sy2">+</span> <span class="nu0">10</span><span class="br0">)</span><span class="sy4">;</span> <span class="co1">// now as if d was double d[1]</span>
    s2 <span class="sy1">=</span> <a href="../memory/malloc.html"><span class="kw403">malloc</span></a><span class="br0">(</span><span class="kw4">sizeof</span> <span class="br0">(</span><span class="kw1">struct</span> s<span class="br0">)</span> <span class="sy2">+</span> <span class="nu0">6</span><span class="br0">)</span><span class="sy4">;</span>  <span class="co1">// same, but UB to access</span>
    <span class="kw4">double</span> <span class="sy2">*</span>dp <span class="sy1">=</span> <span class="sy3">&amp;</span><span class="br0">(</span>s1<span class="sy2">-</span><span class="sy1">&gt;</span>d<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span><span class="br0">)</span><span class="sy4">;</span>    <span class="co1">//  OK</span>
    <span class="sy2">*</span>dp <span class="sy1">=</span> <span class="nu0">42</span><span class="sy4">;</span>                    <span class="co1">//  OK</span>
    dp <span class="sy1">=</span> <span class="sy3">&amp;</span><span class="br0">(</span>s2<span class="sy2">-</span><span class="sy1">&gt;</span>d<span class="br0">[</span><span class="nu0">0</span><span class="br0">]</span><span class="br0">)</span><span class="sy4">;</span>            <span class="co1">//  OK</span>
    <span class="sy2">*</span>dp <span class="sy1">=</span> <span class="nu0">42</span><span class="sy4">;</span>                    <span class="co1">//  undefined behavior</span>
 
    <span class="sy2">*</span>s1 <span class="sy1">=</span> <span class="sy2">*</span>s2<span class="sy4">;</span> <span class="co1">// only copies s.n, not any element of s.d</span>
               <span class="co1">// except those caught in sizeof (struct s)</span></pre></div></div>
</td>
<td><span class="t-mark-rev t-since-c99">(since C99)</span></td>
</tr>
</table>
 <table class="t-rev-begin">
<tr class="t-rev t-since-c11">
<td>
<p>Similar to union, an unnamed member of a struct whose type is a struct without <span class="t-spar">name</span> is known as <i>anonymous struct</i>. Every member of an anonymous struct is considered to be a member of the enclosing struct or union. This applies recursively if the enclosing struct or union is also anonymous.
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="kw1">struct</span> v <span class="br0">{</span>
   <span class="kw1">union</span> <span class="br0">{</span> <span class="co1">// anonymous union</span>
      <span class="kw1">struct</span> <span class="br0">{</span> <span class="kw4">int</span> i, j<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// anonymous structure</span>
      <span class="kw1">struct</span> <span class="br0">{</span> <span class="kw4">long</span> k, l<span class="sy4">;</span> <span class="br0">}</span> w<span class="sy4">;</span>
   <span class="br0">}</span><span class="sy4">;</span>
   <span class="kw4">int</span> m<span class="sy4">;</span>
<span class="br0">}</span> v1<span class="sy4">;</span>
 
v1.<span class="me1">i</span> <span class="sy1">=</span> <span class="nu0">2</span><span class="sy4">;</span>   <span class="co1">// valid</span>
v1.<span class="me1">k</span> <span class="sy1">=</span> <span class="nu0">3</span><span class="sy4">;</span>   <span class="co1">// invalid: inner structure is not anonymous</span>
v1.<span class="me1">w</span>.<span class="me1">k</span> <span class="sy1">=</span> <span class="nu0">5</span><span class="sy4">;</span> <span class="co1">// valid</span></pre></div></div>
<p>Similar to union, the behavior of the program is undefined if struct is defined without any named members (including those obtained via anonymous nested structs or unions).
</p>
</td>
<td><span class="t-mark-rev t-since-c11">(since C11)</span></td>
</tr>
</table>
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style=""><tr>
<td class="mbox-empty-cell"></td>
<td class="mbox-text" style="">This section is incomplete<br>Reason: initialization or link to a page that will talk about initialization </td>
</tr></table>
<h3>
<span class="editsection">[<a href="http%3A//en.cppreference.com/mwiki/index.php" title="Edit section: Notes">edit</a>]</span> <span class="mw-headline" id="Notes">Notes</span>
</h3>
<p>Because members of incomplete type are not allowed, and a stuct type is not complete until the end of the definition, a struct cannot have a member of its own type. A pointer to its own type is allowed, and is commonly used to implement nodes in linked lists or trees.
</p>
<h3>
<span class="editsection">[<a href="http%3A//en.cppreference.com/mwiki/index.php" title="Edit section: Example">edit</a>]</span> <span class="mw-headline" id="Example">Example</span>
</h3>
<div class="t-example">
<div class="t-example-live-link"><div class="coliru-btn coliru-btn-run-init">Run this code</div></div>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="c source-c"><pre class="de1"><span class="co2">#include &lt;stddef.h&gt;</span>
<span class="co2">#include &lt;stdio.h&gt;</span>
 
<span class="kw4">int</span> main<span class="br0">(</span><span class="kw4">void</span><span class="br0">)</span>
<span class="br0">{</span>
    <span class="kw1">struct</span> car <span class="br0">{</span> <span class="kw4">char</span> <span class="sy2">*</span>make<span class="sy4">;</span> <span class="kw4">char</span> <span class="sy2">*</span>model<span class="sy4">;</span> <span class="kw4">int</span> year<span class="sy4">;</span> <span class="br0">}</span><span class="sy4">;</span> <span class="co1">// declares the struct type</span>
    <span class="co1">// declares and initializes an object of a previously-declared struct type</span>
    <span class="kw1">struct</span> car c <span class="sy1">=</span> <span class="br0">{</span>.<span class="me1">year</span><span class="sy1">=</span><span class="nu0">1923</span>, .<span class="me1">make</span><span class="sy1">=</span><span class="st0">"Nash"</span>, .<span class="me1">model</span><span class="sy1">=</span><span class="st0">"48 Sports Touring Car"</span><span class="br0">}</span><span class="sy4">;</span>
    <a href="../io/fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">"car: %d %s %s<span class="es1">\n</span>"</span>, c.<span class="me1">year</span>, c.<span class="me1">make</span>, c.<span class="me1">model</span><span class="br0">)</span><span class="sy4">;</span>
 
    <span class="co1">// declares a struct type, an object of that type, and a pointer to it</span>
    <span class="kw1">struct</span> spaceship <span class="br0">{</span> <span class="kw4">char</span> <span class="sy2">*</span>make<span class="sy4">;</span> <span class="kw4">char</span> <span class="sy2">*</span>model<span class="sy4">;</span> <span class="kw4">char</span> <span class="sy2">*</span>year<span class="sy4">;</span> <span class="br0">}</span>
        ship <span class="sy1">=</span> <span class="br0">{</span><span class="st0">"Incom Corporation"</span>, <span class="st0">"T-65 X-wing starfighter"</span>, <span class="st0">"128 ABY"</span><span class="br0">}</span>,
        <span class="sy2">*</span>pship <span class="sy1">=</span> <span class="sy3">&amp;</span>ship<span class="sy4">;</span>
    <a href="../io/fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">"spaceship: %s %s %s<span class="es1">\n</span>"</span>, ship.<span class="me1">year</span>, ship.<span class="me1">make</span>, ship.<span class="me1">model</span><span class="br0">)</span><span class="sy4">;</span>
 
    <span class="co1">// addresses increase in order of definition</span>
    <span class="co1">// padding may be inserted</span>
    <span class="kw1">struct</span> A <span class="br0">{</span> <span class="kw4">char</span> a<span class="sy4">;</span> <span class="kw4">double</span> b<span class="sy4">;</span> <span class="kw4">char</span> c<span class="sy4">;</span><span class="br0">}</span><span class="sy4">;</span>
    <a href="../io/fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">"offset of char a = %zu<span class="es1">\n</span>offset of double b = %zu<span class="es1">\n</span>offset of char c = %zu<span class="es1">\n</span>"</span>
           <span class="st0">"sizeof(struct A)=%zu<span class="es1">\n</span>"</span>, <a href="../../cpp/types/offsetof.html"><span class="kw105">offsetof</span></a><span class="br0">(</span><span class="kw1">struct</span> A, a<span class="br0">)</span>, <a href="../../cpp/types/offsetof.html"><span class="kw105">offsetof</span></a><span class="br0">(</span><span class="kw1">struct</span> A, b<span class="br0">)</span>,
           <a href="../../cpp/types/offsetof.html"><span class="kw105">offsetof</span></a><span class="br0">(</span><span class="kw1">struct</span> A, c<span class="br0">)</span>, <span class="kw4">sizeof</span><span class="br0">(</span><span class="kw1">struct</span> A<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
    <span class="kw1">struct</span> B <span class="br0">{</span> <span class="kw4">char</span> a<span class="sy4">;</span> <span class="kw4">char</span> b<span class="sy4">;</span> <span class="kw4">double</span> c<span class="sy4">;</span><span class="br0">}</span><span class="sy4">;</span>
    <a href="../io/fprintf.html"><span class="kw851">printf</span></a><span class="br0">(</span><span class="st0">"offset of char a = %zu<span class="es1">\n</span>offset of char b = %zu<span class="es1">\n</span>offset of double c = %zu<span class="es1">\n</span>"</span>
           <span class="st0">"sizeof(struct B)=%zu<span class="es1">\n</span>"</span>, <a href="../../cpp/types/offsetof.html"><span class="kw105">offsetof</span></a><span class="br0">(</span><span class="kw1">struct</span> B, a<span class="br0">)</span>, <a href="../../cpp/types/offsetof.html"><span class="kw105">offsetof</span></a><span class="br0">(</span><span class="kw1">struct</span> B, b<span class="br0">)</span>,
           <a href="../../cpp/types/offsetof.html"><span class="kw105">offsetof</span></a><span class="br0">(</span><span class="kw1">struct</span> B, c<span class="br0">)</span>, <span class="kw4">sizeof</span><span class="br0">(</span><span class="kw1">struct</span> B<span class="br0">)</span><span class="br0">)</span><span class="sy4">;</span>
 
    <span class="co1">// A pointer to a struct can be cast to a pointer to its first member and vice versa</span>
    <span class="kw4">char</span><span class="sy2">*</span> pmake <span class="sy1">=</span> <span class="br0">(</span><span class="kw4">char</span><span class="sy2">*</span><span class="br0">)</span><span class="sy3">&amp;</span>ship<span class="sy4">;</span>
    pship <span class="sy1">=</span> <span class="br0">(</span><span class="kw1">struct</span> spaceship <span class="sy2">*</span><span class="br0">)</span>pmake<span class="sy4">;</span>
<span class="br0">}</span></pre></div></div>
<p>Possible output:
</p>
<div dir="ltr" class="mw-geshi" style="text-align: left;"><div class="text source-text"><pre class="de1">car: 1923 Nash 48 Sports Touring Car
spaceship: 128 ABY Incom Corporation T-65 X-wing starfighter
offset of char a = 0
offset of double b = 8
offset of char c = 16
sizeof(struct A)=24
offset of char a = 0
offset of char b = 1
offset of double c = 8
sizeof(struct B)=16</pre></div></div> 
</div>
<h3>
<span class="editsection">[<a href="http%3A//en.cppreference.com/mwiki/index.php" title="Edit section: See also">edit</a>]</span> <span class="mw-headline" id="See_also">See also</span>
</h3>
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style=""><tr>
<td class="mbox-empty-cell"></td>
<td class="mbox-text" style="">This section is incomplete<br>Reason: link to struct/union members </td>
</tr></table>
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style=""><tr>
<td class="mbox-empty-cell"></td>
<td class="mbox-text" style="">This section is incomplete<br>Reason: link to bit fields </td>
</tr></table>
<table class="metadata plainlinks ambox mbox-small-left ambox-notice" style=""><tr>
<td class="mbox-empty-cell"></td>
<td class="mbox-text" style="">This section is incomplete<br>Reason: link to initialization </td>
</tr></table>

<!-- 
NewPP limit report
Preprocessor visited node count: 2037/1000000
Preprocessor generated node count: 6817/1000000
Post‐expand include size: 55486/2097152 bytes
Template argument size: 13312/2097152 bytes
Highest expansion depth: 17/40
Expensive parser function count: 0/100
-->

<!-- Saved in parser cache with key mwiki1-mwiki_en_:pcache:idhash:9822-0!*!0!!en!*!* and timestamp 20140512175312 -->
</div>                    <!-- /bodycontent -->
                                        <!-- printfooter -->
                    <div class="printfooter">
                    Retrieved from "<a href="http%3A//en.cppreference.com/mwiki/index.php">http://en.cppreference.com/mwiki/index.php?title=c/language/struct&amp;oldid=70243</a>"                    </div>
                    <!-- /printfooter -->
                                                            <!-- catlinks -->
                    <div id="catlinks" class="catlinks"><div id="mw-normal-catlinks" class="mw-normal-catlinks">
<a href="http%3A//en.cppreference.com/w/Special%3ACategories" title="Special:Categories">Category</a>: <ul><li><a href="http%3A//en.cppreference.com/w/Category%3ATodo_with_reason" title="Category:Todo with reason">Todo with reason</a></li></ul>
</div></div>                    <!-- /catlinks -->
                                                            <div class="visualClear"></div>
                    <!-- debughtml -->
                                        <!-- /debughtml -->
                </div>
                <!-- /bodyContent -->
            </div>
        </div>
        <!-- /content -->
        <!-- footer -->
        
        <!-- /footer -->
        <script>if(window.mw){
mw.loader.state({"site":"loading","user":"missing","user.groups":"ready"});
}</script>
<script src="../../../common/skin_scripts.js"></script>
<script>if(window.mw){
mw.loader.load(["mediawiki.action.view.postEdit","mediawiki.user","mediawiki.page.ready","mediawiki.searchSuggest","mediawiki.hidpi","ext.gadget.ColiruCompiler"], null, true);
}</script>
<script src="../../../common/site_scripts.js"></script>

<script type="text/javascript">
var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-2828341-1']);
_gaq.push(['_setDomainName', 'cppreference.com']);
_gaq.push(['_trackPageview']);
</script><!-- Served in 0.096 secs. -->
	</body>
<!-- Cached 20140512205110 -->
</html>
